<template>
  <upload-excel :before-upload="beforeUpload" :on-success="handleSuccess" />
</template>
<script>
import { importEmployee } from '@/api/employees'
export default {
  name: 'Import',
  data() {
    return {
      type: this.$route.query.type
    }
  },
  methods: {
    // 导入前会触发的回调
    // file 参数就是导入的文件信息
    // 如果 return true 就可以正常走后面的逻辑
    // 如果 return false 就会中断导入
    beforeUpload(file) {
      // file.size 是文件的大小，默认单位是字节，B
      // 1KB = 1024B
      // 1MB = 1024KB
      const isLt1M = file.size / 1024 / 1024 < 1
      // 如果小于 1MB 就继续导入
      if (isLt1M) {
        return true
      }
      // 否则来一个错误提示
      this.$message({
        message: 'Please do not upload files larger than 1m in size.',
        type: 'warning'
      })
      return false
    },
    // { results: '...', header: '...' }
    async handleSuccess({ results }) {
      if (this.type === 'user') {
        this.importUser(results)
      } else if (this.type === 'salary') {
        this.importSalary(results)
      }
    },
    async importUser(results) {
      // !思路：根据原来的中文 key 找到对应的英文，把这个找到的英文作为【新对象】的 key，值还是原来的值
      // !#1 先准备好一个中英文的对照关系
      const userRelations = {
        入职日期: 'timeOfEntry',
        手机号: 'mobile',
        姓名: 'username',
        转正日期: 'correctionTime',
        工号: 'workNumber'
      }
      console.log(results)
      // !#2 遍历原数据，因为原数据中的每一项都要转呀
      const arr = []
      results.forEach(item => {
        // !#3 准备一个新对象
        const userInfo = {}
        // !#4 再次遍历 item，因为 item 里面的每一个 key 都要转
        for (const attr in item) {
          // attr => 中文 key
          // item[attr] => 我想要的值
          // userRelations[attr] => 这个是中文 key 对应的英文
          const englishKey = userRelations[attr]
          if (englishKey === 'timeOfEntry' || englishKey === 'correctionTime') {
            userInfo[englishKey] = new Date(this.formatDate(item[attr], '/'))
          } else {
            // 把这个中文 key 对应的英文作为【新对象】key，值还是原来的值
            userInfo[englishKey] = item[attr]
          }
        }
        // 把每次加工好的新对象添加到新数组
        arr.push(userInfo)
      })
      await importEmployee(arr)
      // 回到原页面（员工列表）
      this.$router.back()
    },
    // JS Excel 读取 日期格式
    // 数字 / 365 = n 年
    // 1900 + n 年 = Excel 中的日期
    formatDate(numb, format) {
      const old = numb - 1
      const t = Math.round((old - Math.floor(old)) * 24 * 60 * 60)
      const time = new Date(1900, 0, old, 0, 0, t)
      const year = time.getFullYear()
      const month = time.getMonth() + 1
      const date = time.getDate()
      return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date)
    }
  }
}
</script>
